package com.ytt.core.service.mapper.user;

import com.ytt.core.model.student.StudentRegisterDto;
import com.ytt.core.model.user.UserDto;
import com.ytt.core.model.user.UserEditDTO;
import com.ytt.core.model.user.UserRegisterDTO;
import com.ytt.core.service.entity.user.User;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.ReportingPolicy;

/**
 * UserMapper
 *
 * @author chenwen
 * @date 2019/9/12 16:11
 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserMapper {
    /**
     * 将User转换为UserDTO
     * 如果有不同名的情况，需要使用@Mappings和@Mapping来定义
     *
     * @param entity 实体user
     * @return 转换后的DTO
     */
    UserDto toDTO(User entity);


    /**
     * 将UserDTO转换为User
     * 如果有不同名的情况，需要使用@Mappings和@Mapping来定义
     *
     * @param dto DTO数据
     * @return 转换后的实体
     */
    User toEntity(UserDto dto);


    /**
     * 将UserDTO转换为User
     * 如果有不同名的情况，需要使用@Mappings和@Mapping来定义
     *
     * @param dto DTO数据
     * @return 转换后的实体
     */
    User toEntity(UserRegisterDTO dto);



    /**
     * 将UserDTO转换为User
     * 如果有不同名的情况，需要使用@Mappings和@Mapping来定义
     *
     * @param dto DTO数据
     * @return 转换后的实体
     */
    User toEntity(StudentRegisterDto dto);


    /**
     * 将UserDTO转换为User
     * 如果有不同名的情况，需要使用@Mappings和@Mapping来定义
     *
     * @param dto DTO数据
     * @return 转换后的实体
     */
    User toEntity(UserEditDTO dto);

    /**
     * 使用DTO更新Entity
     *
     * @param dto    DTO数据
     * @param entity 要更新的实体
     */
    void updateEntity(UserEditDTO dto, @MappingTarget User entity);
}
